#ifndef _TOOLS_H__
#define _TOOLS_H__

#include<stdio.h>
#include<stdlib.h>
#include<string.h> // memset 
#include<time.h>
#include<string>
#include<iostream> 
#include <vector>
#include <map>

#include<sys/types.h> //使用网络包含的库
#include<unistd.h>
#include<arpa/inet.h>
#include<netinet/in.h>  
#include <signal.h>

#include "HqHttpHead.hpp"
#include "HqFile.hpp" 

using namespace std;

// 读取文件，返回文件大小
int read_file(const char* path, char *buf);

// 获取文件类型
string get_type_by_path(string path) ;
void init_mimetype();

// 静态文件
void handle_static_file(const HqHttpHead &head, HqHttpResHead &res,  char *buf2 );

/*重要！设置SIGPIPE信号的行为为空，否则对端关闭之后再写数据，系统默认会关闭“进程”，直接闪退*/
void set_SIGPIPEN_NULL();
// 设置fd为非阻塞 NIO
void setNonBlock(int fd);

// 时间相关

string myGetTimeString() ;
string myTime2String(time_t nowtime) ;
time_t myGetTime_t();

// 字符串处理
// 分割字符串
vector<string> split_by(string text, string space_delimiter=" ");
bool containchar(const char inChar,const char *srcstr);
char *trimLeft( char *src,const char* seps);
char *trimRight( char *src,const char* seps );
vector<char *> split(char *s, const char* seps);
char *trim( char *src,const char* seps ) ;
// 分割URL的参数， 输入 "?key=val&key2=value2"
std::map<std::string, std::string> splite_the_params(const char * s, const char * end); // [ , )


#endif